home *** CD-ROM | disk | FTP | other *** search
/ Grand Slam 3 / Grand Slam 3.iso / 023 / soundss3.arj / CINTSS3.C < prev    next >
C/C++ Source or Header  |  1995-03-11  |  6KB  |  254 lines

  1. //
  2. //===========================================================================
  3. //
  4. // C-interface for SoundSystem3
  5. //
  6. // Written for Borland C 3.1 & Tasm 3.1
  7. //
  8. // (pd)1995 by the Frontman of Crew242
  9. //
  10. //
  11. // .model MEDIUM
  12. //
  13. //===========================================================================
  14. //
  15.  
  16. /***************************************************************************
  17.  
  18.     Player definitions
  19.  
  20. ***************************************************************************/
  21.  
  22. #include <dos.h>
  23.  
  24. extern void far MAIN0(void);    // auto-detection
  25. extern void far MAIN1(void);
  26. extern void far MAIN2(void);
  27. extern void far MAIN3(void);
  28. extern void far MAIN4(void);
  29. int near call_function(int player,int func,int param_ax,int param_bx,int param_cx,int param_dx,int param_ds,int *handle,int *param);
  30. typedef struct pblock
  31. {    int baseport;
  32.     char dma_number;
  33.     char irq_number;
  34.     unsigned int samplerate;
  35.     char intern_type;
  36.     char irq_type;
  37.     char start_pos;
  38.     char loop_pos;
  39.     char song_mod;
  40.     unsigned char master_vol;
  41.     unsigned char music_vol;
  42.     unsigned char fx_vol;
  43. };
  44.  
  45. /***************************************************************************
  46.  
  47.     Player functions
  48.  
  49. ***************************************************************************/
  50.  
  51. int autodetect(struct pblock *paramblock)
  52. {       int handle, param;
  53.     call_function(0,0,0,FP_OFF(paramblock),0,0,FP_SEG(paramblock),&handle,¶m);
  54.     return handle;
  55. }
  56.  
  57. int config_init(int player, int code, struct pblock *paramblock)
  58. {       int c, handle, param;
  59.     c= call_function(player,1,0,FP_OFF(paramblock),code,0,FP_SEG(paramblock),&handle,¶m);
  60.     return c;
  61. }
  62.  
  63. int load_mod(int player, char *filename)
  64. {       int c, handle, param;
  65.     c= call_function(player,2,0,0,0,FP_OFF(filename),FP_SEG(filename),&handle,¶m);
  66.     return c;
  67. }
  68.  
  69. int play_music(int player)
  70. {       int c, handle, param;
  71.     c= call_function(player,3,0,0,0,0,0,&handle,¶m);
  72.     return c;
  73. }
  74.  
  75. int stop_music(int player)
  76. {       int c, handle, param;
  77.     c= call_function(player,4,0,0,0,0,0,&handle,¶m);
  78.     return c;
  79. }
  80.  
  81. int end_music(int player)
  82. {       int c, handle, param;
  83.     c= call_function(player,5,0,0,0,0,0,&handle,¶m);
  84.     return c;
  85. }
  86.  
  87. int load_sample(int player, char *filename, int amiga_pc, int *handle)
  88. {       int c, param;
  89.     c= call_function(player,6,0,0,amiga_pc & 0x80,FP_OFF(filename),FP_SEG(filename),handle,¶m);
  90.     return c;
  91. }
  92.  
  93. int play_sample(int player, int handle, int freq_in_hz, int panning)
  94. {       int c, param;
  95.     c= call_function(player,7,panning & 255,handle,freq_in_hz,0,0,&handle,¶m);
  96.     return c;
  97. }
  98.  
  99. int end_sample(int player)
  100. {       int c, handle, param;
  101.     c= call_function(player,8,0,0,0,0,0,&handle,¶m);
  102.     return c;
  103. }
  104.  
  105. int set_samplerate(int player, int freq_in_hz)
  106. {       int c, handle, param;
  107.     c= call_function(player,9,freq_in_hz,0,0,0,0,&handle,¶m);
  108.     return c;
  109. }
  110.  
  111. int get_volume(int player, int *master_vol, int *music_vol, int *fx_vol)
  112. {       int c, handle, param;
  113.     c= call_function(player,10,0,0,0,0,0,&handle,¶m);
  114.     *master_vol= handle & 255;
  115.     *music_vol= param & 255;
  116.     *fx_vol= param >> 8;
  117.     return c;
  118. }
  119.  
  120. int set_volume(int player, int master_vol, int music_vol, int fx_vol)
  121. {       int c, handle, param;
  122.     c= call_function(player,11,master_vol & 255,(fx_vol << 8)+(music_vol & 255),0,0,0,&handle,¶m);
  123.     return c;
  124. }
  125.  
  126. int set_songloop(int player, int loop_position)
  127. {       int c, handle, param;
  128.     c= call_function(player,12,loop_position & 255,0,0,0,0,&handle,¶m);
  129.     return c;
  130. }
  131.  
  132. int get_songposition(int player, int *song_position)
  133. {       int c, handle, param;
  134.     c= call_function(player,13,0,0,0,0,0,&handle,¶m);
  135.     *song_position= handle & 127;
  136.     return c;
  137. }
  138.  
  139. int set_songposition(int player, int song_position)
  140. {       int c, handle, param;
  141.     c= call_function(player,14,song_position & 127,0,0,0,0,&handle,¶m);
  142.     return c;
  143. }
  144.  
  145. int get_songmod(int player, int *song_modus)
  146. {       int c, handle, param;
  147.     c= call_function(player,15,0,0,0,0,0,&handle,¶m);
  148.     *song_modus= handle & 3;
  149.     return c;
  150. }
  151.  
  152. int set_songmod(int player, int song_modus)
  153. {       int c, handle, param;
  154.     c= call_function(player,16,song_modus & 3,0,0,0,0,&handle,¶m);
  155.     return c;
  156. }
  157.  
  158. /***************************************************************************
  159.  
  160.     Player interface subroutines
  161.  
  162. ***************************************************************************/
  163.  
  164. int near call_function(int player,int func,int param_ax,int param_bx,int param_cx,int param_dx,int param_ds,int *handle,int *param)
  165. {    int c,ra,rb,rc;
  166.     switch(player){
  167.     case 0:
  168.         {asm{    pusha           /* VERY IMPORTANT, BECAUSE C USES */
  169.             mov ax,param_ax /* SI AND DI AS TEMP VAR */
  170.             mov bx,param_bx
  171.             mov cx,param_cx
  172.             mov dx,param_dx
  173.             mov es,param_ds
  174.             mov di,func};
  175.         MAIN0();
  176.         asm{    mov ra,ax
  177.             mov rb,bx
  178.             mov rc,cx
  179.             mov c,dx
  180.             popa};
  181.         break;
  182.         };
  183.     case 1:
  184.         {asm{    pusha           /* VERY IMPORTANT, BECAUSE C USES */
  185.             mov ax,param_ax /* SI AND DI AS TEMP VAR */
  186.             mov bx,param_bx
  187.             mov cx,param_cx
  188.             mov dx,param_dx
  189.             mov es,param_ds
  190.             mov di,func};
  191.         MAIN1();
  192.         asm{    mov ra,ax
  193.             mov rb,bx
  194.             mov rc,cx
  195.             mov c,dx
  196.             popa};
  197.         break;
  198.         };
  199.     case 2:
  200.         {asm{    pusha           /* VERY IMPORTANT, BECAUSE C USES */
  201.             mov ax,param_ax /* SI AND DI AS TEMP VAR */
  202.             mov bx,param_bx
  203.             mov cx,param_cx
  204.             mov dx,param_dx
  205.             mov es,param_ds
  206.             mov di,func};
  207.         MAIN2();
  208.         asm{    mov ra,ax
  209.             mov rb,bx
  210.             mov rc,cx
  211.             mov c,dx
  212.             popa};
  213.         break;
  214.         };
  215.     case 3:
  216.         {asm{    pusha           /* VERY IMPORTANT, BECAUSE C USES */
  217.             mov ax,param_ax /* SI AND DI AS TEMP VAR */
  218.             mov bx,param_bx
  219.             mov cx,param_cx
  220.             mov dx,param_dx
  221.             mov es,param_ds
  222.             mov di,func};
  223.         MAIN3();
  224.         asm{    mov ra,ax
  225.             mov rb,bx
  226.             mov rc,cx
  227.             mov c,dx
  228.             popa};
  229.         break;
  230.         };
  231.     case 4:
  232.         {asm{    pusha           /* VERY IMPORTANT, BECAUSE C USES */
  233.             mov ax,param_ax /* SI AND DI AS TEMP VAR */
  234.             mov bx,param_bx
  235.             mov cx,param_cx
  236.             mov dx,param_dx
  237.             mov es,param_ds
  238.             mov di,func};
  239.         MAIN4();
  240.         asm{    mov ra,ax
  241.             mov rb,bx
  242.             mov rc,cx
  243.             mov c,dx
  244.             popa};
  245.         break;
  246.         };
  247.     }
  248.     *handle= ra;
  249.     *param= rb;
  250.     return c;
  251. }
  252. //
  253. //===========================================================================
  254. //